public class Solution10 {
    public int[] missingTwo(int[] nums) {
        int[] ret = new int[2];
        // 1. 把所有的数异或在一起
        int temp = 0;
        for(int i = 1; i <= nums.length + 2; i++) {
            temp ^= i;
        }
        for(int i = 0; i < nums.length; i++) {
            temp ^= nums[i];
        }
        // 2. 找出 a,b 两个比特位不同的那一位
        int lowBit = temp & (-temp);
        // 3. 将所有的数按照 lowBit 位不同，分两类异或
        for(int i = 0; i < nums.length; i++) {
            if((lowBit & nums[i]) == 0) {
                ret[0] ^= nums[i];
            }else {
                ret[1] ^= nums[i];
            }
        }
        for(int i = 1; i <= nums.length + 2; i++) {
            if((lowBit & i) == 0) {
                ret[0] ^= i;
            }else {
                ret[1] ^= i;
            }
        }
        return ret;
    }
}
